package sucre

import ve.org.src.flowDatos.DatosInscripcion

class InscripcionController {
   
    def loginService
    def beforeInterceptor = [action:this.&auth]
    def auth = {
        def result =loginService.validarAcceso(
            session["seguridad_usuario"],
            session["seguridad_funcionesHabilitadas"],
            controllerName,actionName,request.getRemoteAddr().toString())
        if(!result) {
            redirect(controller:"login",action:"auth",params:['acceso':false])
            return false
        }
    }
    def index = {}

    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

    def parametersService
    def list = {
        params.max = parametersService.getInt("paginacion.maxRegPagina")
        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
        def alumno;
        if (params.searchField != null) {
            alumno = Alumno.findByCedula(params.searchField);
        }
        def query={
            if(params.searchField){
                eq('alumno',alumno)
            }
        }
        def inscripcionList=Inscripcion.createCriteria().list(params,query)
        [inscripcionInstanceList:  inscripcionList,
            inscripcionInstanceTotal: inscripcionList.getTotalCount()]
    }

    def create = {
        def inscripcionInstance = new Inscripcion()
        inscripcionInstance.properties = params
        def alumnos = "["
        Alumno.list().each{alumno ->
            alumnos +=  '{value: "' + alumno.cedula +'", '
            alumnos +=  'label: "' + alumno.cedula +'", '
            alumnos +=  'desc: "' + alumno.nombres + " " + alumno.apellidos+ '"},'
        }
        alumnos += "]"
        def lapso = sucre.LapsoAcademico.createCriteria()
        def results = lapso.list (max: 1, offset: 0) {
            order("id", "desc")
        }
        inscripcionInstance.lapsoAcademico = results.get(0).nombre
        if(params.eOc=='edit'){
            inscripcionInstance=Inscripcion.findById(params.id)
        }else{
            flash.message=''
            params.eOc='create'
        }
        return [inscripcionInstance:inscripcionInstance,eOc:params.eOc, alumnos:alumnos]
    }
    def save = {
        def listaErrores=[]
        def alumnos = "["
        Alumno.list().each{alumno ->
            alumnos +=  '{value: "' + alumno.cedula +'", '
            alumnos +=  'label: "' + alumno.cedula +'", '
            alumnos +=  'desc: "' + alumno.nombres + " " + alumno.apellidos+ '"},'
        }
        alumnos += "]"
        def formateador = new java.text.SimpleDateFormat("dd/MM/yyyy")        
        if(params.eOc.equals("edit")){
            def inscripcionInstance = Inscripcion.get(params.id)
            flash.message=message(code:'def.noEdicion', args:[inscripcionInstance])
            render(view:'create',model:[inscripcionInstance:inscripcionInstance,upd:'si',
                    listaErrores:listaErrores, eOc:'edit',alumnos:alumnos])
            return ""
        }        
        if (!params.alumno.trim().equals('') && !params.division.equals('')
            && !params.materia.equals('') && !params.seccion.equals('')
            && !params.docente.equals('')) {
            params.alumno = Alumno.findByCedula(params.alumno)
            params.division = Division.get(params.division)
            params.materia = Materia.get(params.materia)
            params.seccion = Seccion.get(params.seccion)
            params.docente = Docente.get(params.docente)            
        } 
        
        
        params.calificacion = 0
        if (params.fechaInscripcion != null && params.fechaInscripcion != "") {
            params.fechaInscripcion = formateador.parse(params.fechaInscripcion)
        }
        
        def inscripcionInstance = new Inscripcion(params)
        if(params.eOc=='edit'){
            inscripcionInstance=Inscripcion.get(params.id)
            inscripcionInstance.properties=params
        }
        
        Inscripcion.withTransaction{ status ->
            try{
                if(!inscripcionInstance.hasErrors() && inscripcionInstance.save(flush:true)) {
                    
                    if(params.eOc=='create'){
                        //registrar auditoria def.titular.creado
                        flash.message=message(code:'def.registro.creado',
                            args:[inscripcionInstance])
                    }else{
                        //def.titular.actualizado
                        flash.message=message(code:'def.registro.actualizado',
                            args:[inscripcionInstance])
                    }
                    
                    if(params.eOc=='create'){
                        params.eOc='edit'
                    }
                }
            }catch(Exception e){
                println e
                listaErrores.add(message(code:'def.registro.error.Creando'))
                status.setRollbackOnly()
            }
        }
        
        render(view:'create',model:[inscripcionInstance:inscripcionInstance,
                eOc:params.eOc,upd:'si',listaErrores:listaErrores,alumnos:alumnos])
    }
    def search={
        redirect(action:list,params:[searchField:params.searchField])
    }
    def busquedaDivisiones = {
        def alumno = Alumno.findByCedula(params.alumno)
        if(alumno != null) {
            try {
                def divisiones = alumno.especialidad.divisiones
                def html = "<select  name='division' class='campos' style='width:200px' onchange=' new Ajax.Updater({success:\"divMaterias\",failure:\"ohno\"},\"/inscripcion/busquedaMaterias\",{asynchronous:true,evalScripts:true,parameters:\"division=\" + this.value});' >"
                html += "<option>Seleccione uno...</option>"
                divisiones.each{division ->
                    html += "<option value='"+division.id+"'>" + division+"</option>"
                }
                html += "</select>"
                render html
            } catch (Exception ex) {
                render "<select  class='campos' style='width:200px' name='division' />"
            }    
        } else {
            render "<select  class='campos' style='width:200px' name='division' />"
        }  
    }
    def busquedaMaterias = {
        def materias = Division.get(params.division).materias
        def html = "<select class='campos' name='materia' style='width:200px;'>"
        html += "<option>Seleccione uno...</option>"
        materias.each{materia ->
            html += "<option value='"+materia.id+"'>" + materia+"</option>"
        }
        html += "</select>"
        render html
    }
    def delete = {
        def listaErrores=[]
        def inscripcionInstance = Inscripcion.get(params.id)
        flash.message=message(code:'def.noeliminado', args:[inscripcionInstance])
        render(view:'create',model:[inscripcionInstance:inscripcionInstance,upd:'si',
               listaErrores:listaErrores, eOc:'edit'])
    }
}
